package city.spring.action.model;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 物资入库的物资信息
 *
 * @author 谢金婷
 * @date 2020/7/6 0024 10:23
 */
public abstract class AbstractMaterialWarehousingMaterial<MATERIAL> {
    /**
     * 当前物资使用次数
     */
//    private int materialNumber = 0;

    /**
     * 该物资的唯一Key
     *
     * @return 唯一键值
     */
    public abstract Object getKey();

    public abstract String getCname();

    /**
     * 物资名称名称
     *
     * @return 名称
     */
    public abstract String getName();

    public abstract String getSuppliername();

    public abstract Object getMaterialwarehousingId();

    public abstract Object getSupplierId();

    public abstract BigDecimal getWarehousingquantity();

    public abstract BigDecimal getUnitprice();

    public abstract BigDecimal getTotal();

    public abstract Date getExpirationdate();

    public abstract Date getProductiondate();

    public abstract Object getSpecifications();

    /**
     * 获取原始对象
     *
     * @return 原始对象
     */
    public abstract MATERIAL getObject();

    /**
     * 获取该物资的使用次数
     *
     * @return 使用次数
     */
//    public final int getShelflevelNumber() {
//        return materialNumber;
//    }

    /**
     * 判断是否能够使用该物资
     *
     * @return the boolean
     */
//    public final boolean canUse() {
//        int deliveryquantity = getDeliveryquantity();
//        if (deliveryquantity <= -1) {
//            // 自动计划人员上班次数
//            return true;
//        }
//        // 当可使用次数 workNumber 等于使用次数 useNumber 时不允许再次参与排班
//        return deliveryquantity != materialNumber;
//    }

    /**
     * 使用该人
     */
//    public final void useShelflevel() {
//        ++shelflevelNumber;
//    }
    @Override
    public boolean equals(Object object) {
        if (object instanceof AbstractMaterialWarehousingMaterial) {
            AbstractMaterialWarehousingMaterial<?> WarehousingMaterial = (AbstractMaterialWarehousingMaterial<?>) object;
            Object key1 = this.getKey();
            Object key2 = WarehousingMaterial.getKey();
            return key1 != null && key1.equals(key2);
        }
        return false;
    }

    @Override
    public String toString() {
        return String.format("%s(%s/%s)", getMaterialwarehousingId(), getSupplierId(), getWarehousingquantity(), getUnitprice(), getTotal(), getExpirationdate(), getProductiondate(), getSpecifications());
    }
}
